home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-02 / pcl4p35.zip / PCL4P.USR < prev    next >
Text File  |  1993-05-12  |  68KB  |  1,802 lines

  1.  
  2.  
  3.                           Personal Communications Library
  4.  
  5.                                 For Turbo Pascal
  6.  
  7.  
  8.                                     (PCL4P)
  9.  
  10.  
  11.  
  12.                                  USERS MANUAL
  13.  
  14.  
  15.  
  16.  
  17.  
  18.                                   Version  3.5
  19.  
  20.                                   May 15, 1993
  21.  
  22.  
  23.  
  24.  
  25.                         This software is provided as-is.
  26.                  There are no warranties, expressed or implied.
  27.  
  28.  
  29.  
  30.  
  31.                               Copyright (C) 1993
  32.                               All rights reserved
  33.  
  34.  
  35.  
  36.                               MarshallSoft Computing, Inc.
  37.                               Post Office Box 4543
  38.                               Huntsville AL 35815
  39.  
  40.                               Voice 205-881-4630
  41.                               FAX   205-881-4630
  42.                               BBS   205-880-9748
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.         PCL4P Users Manual                                     Page 1
  61.                               C O N T E N T S
  62.  
  63.  
  64.  
  65.  
  66.  
  67.          Chapter                                                   Page
  68.  
  69.          1.0 Introduction................................................3
  70.              1.1 User Support............................................4
  71.              1.2 A Typical Application...................................5
  72.              1.3 Installation............................................6
  73.          2.0 Library Organization........................................7
  74.              2.1 Configuration...........................................7
  75.              2.2 Initialization & Termination............................7
  76.              2.3 Modem Control & Status..................................8
  77.              2.4 Serial I/O..............................................8
  78.              2.5 Error Detection.........................................9
  79.              2.6 General Support.........................................9
  80.          3.0 Library Overview...........................................10
  81.              3.1 Using the Library......................................10
  82.              3.2 Example Programs.......................................10
  83.              3.3 Compiling & Linking....................................11
  84.          4.0 Talking to Your Modem......................................12
  85.              4.1 Modem Standards........................................12
  86.              4.2 Flow Control...........................................13
  87.              4.3 Modem Initialization...................................14
  88.          5.0 Problems...................................................15
  89.          6.0 Serial Communications......................................16
  90.              6.1 Communications Basics..................................16
  91.              6.2 Standard Port Addresses................................17
  92.              6.3 Running 3 or 4 Ports Concurrently......................18
  93.              6.4 Using the DigiBoard....................................19
  94.              6.4 RS232 Signals..........................................20
  95.              6.5 National INS8250, INS16450, and INS16550 UARTs.........21
  96.              6.6 Register Summary.......................................22
  97.          7.0 Terminal Emulator Program (TERM)...........................24
  98.          8.0 Legal Issues...............................................25
  99.              8.1 Registration...........................................25
  100.              8.2 License................................................25
  101.              8.3 Warranty...............................................26
  102.          9.0 Summary....................................................27
  103.              9.1 Revision History.......................................27
  104.              9.2 Function Summary.......................................29
  105.              9.3 Further Reading........................................29
  106.         10.0 Other MarshallSoft Computing products......................30
  107.              10.1 The Personal Communications Library for C.............30
  108.              10.2 The Personal Protocol Library for C...................30
  109.              10.3 The Personal Protocol Library for Pascal..............30
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.         PCL4P Users Manual                                     Page 2
  121.          1.0 Introduction
  122.  
  123.  
  124.          The Personal Communications Library for Turbo Pascal (PCL4P) is an
  125.          asynchronous   communications  library  designed  for  experienced
  126.          software developers programming in Turbo Pascal, version  4.0  and
  127.          up. The PCL features:
  128.  
  129.          o 31 communications and support functions.
  130.          o Support for the high performance INS16550 UART.
  131.          o Supports hardware (RTS/CTS) flow control.
  132.          o Interrupt driven receiver.
  133.          o Supports 300 baud to 115,200 baud.
  134.          o Supports the DigiBoard PC/4 and PC/8.
  135.          o Supports COM1 through COM4 (through COM10 with DigiBoard).
  136.          o Adjustable receive queues from 8 bytes to 32 KB.
  137.          o Control-BREAK error exit.
  138.          o 18 communications error conditions trapped.
  139.          o Allows 4 ports to run concurrently (10 with DigiBoard).
  140.          o Complete modem control & status.
  141.          o Written in assembly language for small size & high speed.
  142.          o Terminal program featuring ASCII (with XON/XOFF), XMODEM, YMODEM,
  143.            and YMODEM-G.
  144.  
  145.          Why should you buy PCL4P ? I can give you several good reasons.
  146.  
  147.            COMPLETE - PCL4P is complete since it provides absolute control
  148.                       of the serial ports (including the high  performance
  149.                       INS16550).
  150.  
  151.             COMPACT - PCL4P  is  very compact  at  less  than  6  KB. Your
  152.                       application doesn't carry a lot of excess code.
  153.  
  154.                FAST - PCL4P is fast since it will  run  at  38400  baud  on
  155.                       even  slow  8088 PCs (4.77 MHZ) and at 115200 baud on
  156.                       most everything else.
  157.  
  158.             SUPPORT - If you get stuck,  you talk  to  the programmer  that
  159.                       wrote the code, not a  person  hired  to  answer  the
  160.                       phone.
  161.  
  162.                 BBS - A BBS is  available  (2400  baud  N81)  in  order  to
  163.                       provide immediate support as necessary.
  164.  
  165.          NEWSLETTER - One  year  subscription  to  the  MSC  newsletter
  166.                       discusses communications  problems  and  solutions
  167.                       (published quarterly).
  168.  
  169.               PRICE - You get PCL4P for a very reasonable price !
  170.  
  171.            UPGRADES - Once you buy PCL4P, you can always update to  the  most
  172.                       recent  version  for  little  more  than  the  cost  of
  173.                       sending it out to you.
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.         PCL4P Users Manual                                     Page 3
  181.          1.1 User Support
  182.  
  183.          We want you to be successful in developing your applications using
  184.          PCL4P!  We depend on our customers to let us know what  they  need
  185.          in  a  communications  library.   This  means  we are committed to
  186.          providing the best communications library that we can. If you have
  187.          any suggestions or comments, please let us know.
  188.  
  189.          If  you  are having a problem using PCL4P, call us at 205-881-4630
  190.          between 5 PM and 9 PM CST Monday through Saturday, or  FAX  us  at
  191.          the  same  telephone  number at any time (24 hours).  You can also
  192.          call at other times and leave a message, and call back later for a
  193.          reply. However, we can only answer questions with respect to using
  194.          the PCL4P library. We cannot help you program your application.
  195.  
  196.          You  may  also  call our User Support BBS (2400 baud, no parity, 8
  197.          data bits, 1  stop  bit)  at  205-880-9748  and  leave  a  message
  198.          (address it to the SYSOP).  We will usually have a reply ready for
  199.          you within 24 hours.
  200.  
  201.          The  BBS  is available 24 hours per day except at 2 PM Sundays for
  202.          maintenanace. All files are in standard ZIP format. The  BBS  will
  203.          contain  the latest shareware version of all MarshallSoft products
  204.          as well as related files such as:
  205.  
  206.              BUGS.ZIP  --  Bug report.
  207.              NEWS.ZIP  --  Latest news regarding our products.
  208.  
  209.          The  MarshallSoft  Computing,  Inc.   newsletter  "Comm  Talk"  is
  210.          published quarterly.  It discusses various communications problems
  211.          and   solutions  using  PCL4P  as  well  as  related  information.
  212.          Registered users receive a  one  year  complimentary  subscription
  213.          when first registering and for each update purchased.
  214.  
  215.          Of  course, you can always write to us. You should receive a reply
  216.          within a week or so.
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.         PCL4P Users Manual                                     Page 4
  241.          1.2 A Typical Application
  242.  
  243.  
  244.          In  general,  there  are  two  classes  of applications that use a
  245.          communications library like PCL4P -- those that  use  a  modem  to
  246.          connect  to the outside world and those that connect directly to a
  247.          peripheral device. In either case, a typical  application  program
  248.          using PCL4P might look like the following code outline:
  249.  
  250.  
  251.  
  252.          ******************************************************************
  253.          *                                                                *
  254.          * program YourProgram                                            *
  255.          *                                                                *
  256.          * uses PCL4P;                                                    *
  257.          * ...                                                            *
  258.          * ...                                                            *
  259.          * var Buffer : array[0..1023] of Char;                           *
  260.          * ...                                                            *
  261.          * begin (* YourProgram *)                                        *
  262.          *    RetCode := SioRxBuf(Port,Ofs(Buffer),Seg(Buffer),Size1024); *
  263.          *    RetCode := SioParms(Port,NoParity,OneStopBit,WordLength8);  *
  264.          *    RetCode := SioReset(Port,Baud2400);                         *
  265.          *    ...                                                         *
  266.          *    ... ( application code )                                    *
  267.          *    ...                                                         *
  268.          *    RetCode := SioDone(Port);                                   *
  269.          * end. (* YourProgram *)                                         *
  270.          ******************************************************************
  271.  
  272.  
  273.          In the above example, SioRxBuf is called to set up the a 1024 byte
  274.          receive  buffer; SioParms is called to set up the parity, stop bit
  275.          count, and word length; SioReset is called to set the baud rate to
  276.          2400 and  reset  the  UART  (  Univeral  Asynchronous  Receiver  /
  277.          Transmitter ).
  278.  
  279.          Before  leaving your application, SioDone is called to restore the
  280.          prior state of the serial communications system.
  281.  
  282.          If  you  are  using  a  modem, you also need to be concerned about
  283.          initializing your modem correctly and handling any  required  flow
  284.          control. Refer to the "Talking to Your Modem" chapter for detailed
  285.          information.
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.         PCL4P Users Manual                                     Page 5
  301.          1.3 Installation
  302.  
  303.  
  304.          (1)  Before installation of PCL4P, your compiler should already be
  305.          installed on your system and tested. If you are not familiar  with
  306.          makefiles,  refer  to  your  compiler  manual.   Examine  the file
  307.          "FILES.LST" for a list of all the distribution files.
  308.  
  309.          (2) Make a backup  copy  of  your  distribution  disk.   Put  your
  310.          original distribution disk in a safe place.
  311.  
  312.          (3) Create a work directory  on  your  work  disk  (normally  your
  313.          harddisk). For example, to create a work directory named PCL4P, we
  314.          first log onto the work disk and then type:
  315.  
  316.                                MKDIR PCL4P
  317.  
  318.          (4)  Copy  all the files from your backup copy of the distribution
  319.          disk to your work directory.  For example, to  copy  from  the  A:
  320.          drive to your work directory, we type:
  321.  
  322.                               CD PCL4P
  323.                               COPY A:*.*
  324.  
  325.          (5) Compile SIMPLE.PAS:
  326.  
  327.                               TPC SIMPLE
  328.  
  329.          SIMPLE.PAS should compile without any problems.
  330.  
  331.          (7) The recommended way to  test  SIMPLE  is  to  run  it  on  two
  332.          computers  connected  by a null modem cable.  Whatever is typed on
  333.          one computer should be displayed on the other.
  334.  
  335.          (8) Compile and run TERM.PAS.
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.         PCL4P Users Manual                                     Page 6
  361.          2.0 Library Organization
  362.  
  363.  
  364.          The  PCL4P  library is organized into six categories of functions.
  365.          Refer to the PCL  Reference  Manual  (PCL4P.REF)  for  details  on
  366.          individual functions.
  367.  
  368.  
  369.          2.1 Configuration
  370.  
  371.  
  372.          There are three functions in the configuration category.  SioPorts
  373.          is used to set the number of PC ports, specify the first DigiBoard
  374.          port,  and  set the DigiBoard status register address.  SioUART is
  375.          used to change the UART base address for a communications port  to
  376.          a   non-standard  address,  while  SioIRQ  is  used  to  assign  a
  377.          nonstandard  IRQ  line  to  a  port.    (See   the   chapter   IBM
  378.          Communications  Ports  for more details on standard UART addresses
  379.          and IRQ lines).
  380.  
  381.          The  configuration  functions SioPorts, SioUART and SioIRQ must be
  382.          called before  calling  any  other  library  functions.   Be  very
  383.          careful  in  using  these  functions.   Remember  that your serial
  384.          hardware must support the UART and IRQ that you  specify.
  385.  
  386.          SioPorts -- Set # PC ports, 1st DigiBoard port & status register.
  387.          SioUART  -- Sets the UART base address.
  388.          SioIRQ   -- Assigns an IRQ line and interrupt service to a port.
  389.  
  390.          THE IRQ GOLDEN RULE: You may open (via SioReset) only one port per
  391.          IRQ (except for the DigiBoard).
  392.  
  393.  
  394.          2.2 Initialization & Termination
  395.  
  396.  
  397.          There are seven functions in the  initialization  and  termination
  398.          category.   Together,  SioParms,  SioFIFO,  SioRxBuf, and SioReset
  399.          initialize your serial communications  system.   Your  application
  400.          must  call  SioParms  and  SioRxBuf  before  calling SioReset, and
  401.          SioReset must be called before any serial I/O  processing  can  be
  402.          done.
  403.  
  404.          After initialization, SioParms and SioBaud can be called again  to
  405.          change  the communications parameters without resetting the serial
  406.          port. SioFlow can be called to enable hardware flow control.
  407.  
  408.          Before exiting from your  application,  SioDone  must  be  called.
  409.          Failure to call SioDone can crash your system later.
  410.  
  411.          SioRxBuf   -- Sets up receive buffer.
  412.          SioFIFO    -- Sets the interrupt level for the INS16550.
  413.          SioParms   -- Sets parity, stop bits, and word length.
  414.          SioReset   -- Initialize a serial port for processing.
  415.          SioDone    -- Terminates further serial processing.
  416.          SioBaud    -- Sets the baud rate of the selected port.
  417.          SioFlow    -- Enables / disables flow control.
  418.  
  419.  
  420.         PCL4P Users Manual                                     Page 7
  421.          2.3 Modem Control & Status
  422.  
  423.  
  424.          There  are  seven  functions  in  the  modem  control  and  status
  425.          category which provide your application with complete control over
  426.          the status and control bits of your modem.
  427.  
  428.          There are two modem control bits, "Data Terminal Ready" (DTR)  and
  429.          "Request  To  Send" (RTS). These bits can be read, set, or cleared
  430.          by SioDTR and SioRTS.
  431.  
  432.          There are four modem status bits, "Data Set Ready"  (DSR),  "Clear
  433.          To  Send"  (CTS), "Ring Indicator" (RI), and "Data Carrier Detect"
  434.          (DCD). SioModem can read any of the  modem  status  bits.  SioDSR,
  435.          SioCTS,  SioRI,  and  SioDCD  can only read their respective modem
  436.          status bit.
  437.  
  438.          Refer to the chapter entitled "RS232 Signals" for a discussion  of
  439.          each of the control and status bits.
  440.  
  441.          SioDTR    -- Set, clear, or read the Data Terminal Ready (DTR) bit.
  442.          SioRTS    -- Sets, clears, or reads the Request to Send (RTS) line.
  443.          SioModem  -- Reads the modem status register.
  444.          SioDSR    -- Reads the Data Set Ready (DSR) modem status bit.
  445.          SioCTS    -- Reads the Clear to Send (CTS) modem status bit
  446.          SioDCD    -- Reads the Data Carrier Detect (DCD) modem status bit.
  447.          SioRI     -- Reads the Ring Indicator (RI) modem status bit.
  448.  
  449.  
  450.          2.4 Serial I/O
  451.  
  452.  
  453.          There are six  library  functions  in  the  serial  I/O  category.
  454.          Together,  these  functions  give  the programmer complete control
  455.          over serial I/O.  Higher level functions  such  as  protocols  and
  456.          smart  modem communications can be completely implemented in terms
  457.          of these functions. Refer to the example code.
  458.  
  459.          SioGetc  and SioPutc perform all the actual serial I/O.  SioUnGetc
  460.          and SioRxFlush modify the receive queue. SioLine can  be  used  to
  461.          test for UART errors.
  462.  
  463.          SioGetc    -- Reads the next character from the serial line.
  464.          SioPutc    -- Transmit a character over a serial line.
  465.          SioUnGetc  -- "Un-gets" (puts back) a specified character.
  466.          SioRxFlush -- Flush (clears) the receive buffer.
  467.          SioRxQue   -- Returns the number of characters in the receive queue.
  468.          SioLine    -- Reads the line status register.
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.         PCL4P Users Manual                                     Page 8
  481.          2.5  Error Detection
  482.  
  483.  
  484.          There are four functions in the error detection category. They are
  485.          concerned with detecting or reporting communications errors.   Use
  486.          of  these  functions  can make your application significantly more
  487.          robust.
  488.  
  489.          SioBrkKey   can   be   used  as  an  "emergency"  exit  from  your
  490.          application. SioBrkSig can read or modify the UART break bit. This
  491.          is useful for signalling the remote system that a fatal  condition
  492.          has  occurred.  SioLoopBack  can  be used to test the integrity of
  493.          your UART.  SioError displays a error message corresponding to  an
  494.          error  code  returned  from a PCL4P function.
  495.  
  496.          SioBrkKey -- Returns non-zero if the Control-BREAK key was pressed
  497.          SioBrkSig -- Asserts, cancels, or detects  BREAK  signal.
  498.          SioError  -- Displays  error  in  text.
  499.          SioLoopBack -- Performs a UART loopback test.
  500.  
  501.  
  502.          2.6 General Support
  503.  
  504.  
  505.          There are two functions in the general support category.  Strictly
  506.          speaking,  they are not communications functions, but they take up
  507.          a very small amount of additional memory.   Registered  users  can
  508.          remove these functions from the library if needed.
  509.  
  510.          SioInfo     -- Returns the library version & memory model.
  511.          SioTimer    -- Returns the number of system clock tics.
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.         PCL4P Users Manual                                     Page 9
  541.          3.0 Library Organization
  542.  
  543.  
  544.          3.1 Using the Library
  545.  
  546.  
  547.          The  PCL4P  library has been tested on a TANDY 1000 (4.77 MHZ 8088
  548.          IBM PC clone), a TANDY 3000 (80286 IBM AT clone), a  TANDY  1400LT
  549.          (IBM XT clone), and a Gateway 2000 Cache (25 MHZ 80386-DX).  PCL4P
  550.          has been tested under MSDOS 2.11, 3.2, 3.3, 4.01, and 5.0.
  551.  
  552.          Please  examine  the  PCL4P.PAS file. Note that COM1 is defined as
  553.          port zero, not port one.  The user must assume  the  responsibilty
  554.          for  passing the correct information when calling PCL4P functions.
  555.  
  556.  
  557.          3.2 Example Programs
  558.  
  559.  
  560.          Two communications programs are provided as a demonstration of the
  561.          PCL4P library -- SIMPLE and TERM.
  562.  
  563.          SIMPLE  is  provided  as  the  simpliest example of communications
  564.          programming  using  PCL4P.   The  user  should  compile  and  link
  565.          SIMPLE.PAS as a test of the library.
  566.  
  567.          If you have two computers, connect them together with a null modem
  568.          cable and run SIMPLE on both machines.  The baud rate in SIMPLE is
  569.          hard  coded to 2400 baud. It is easily changed in the source code.
  570.          Start SIMPLE by typing SIMPLE followed by the port. For example:
  571.  
  572.               SIMPLE 1
  573.  
  574.          Once SIMPLE is started on both computers, whatever is typed on one
  575.          machine should be displayed on the other, and vice versa.
  576.  
  577.          The  TERM program is a more capable terminal emulator than SIMPLE.
  578.          It features modem initialization, hardware flow control, and  file
  579.          transfer  using ASCII, XMODEM, YMODEM, and YMODEM-G communications
  580.          protocols.  TERM can be used to call up any bulletin board system,
  581.          including the MarshallSoft Computing BBS.  Start  TERM  by  typing
  582.          TERM followed by the port and baud rate. For example:
  583.  
  584.               TERM 4 2400
  585.  
  586.          Refer to the chapter "Terminal Emulator Program"  for  a  complete
  587.          discussion of TERM.
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.         PCL4P Users Manual                                     Page 10
  601.          3.3 Compiling and Linking
  602.  
  603.  
  604.          Registered users may wish to assemble  PCL4PLIB.ASM.  To  assemble
  605.          using the Microsoft assembler:
  606.  
  607.                MASM PCL4PLIB /DPASCAL_MODEL;
  608.  
  609.          To build the library TPU:
  610.  
  611.                TPC PCL4P
  612.  
  613.          To compile the sample programs:
  614.  
  615.                TPC SIMPLE.PAS
  616.  
  617.                TPC TERM.PAS /m
  618.  
  619.          A  makefile (  TERM.MAK  )  is  also  provided  for  the  TERM.PAS
  620.          program. To compile TERM and all dependent units, type:
  621.  
  622.                MAKE -FTERM
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.         PCL4P Users Manual                                     Page 11
  661.          4.0 Talking to Your Modem
  662.  
  663.  
  664.          A modem is  used  to  extend  the  distance  over  which  you  may
  665.          communicate.   Without  a  modem, your RS232 cable is limited to a
  666.          maximum of approximately 50  feet.  But  with  a  modem,  you  can
  667.          communicate literally around the world.
  668.  
  669.  
  670.          4.1 Modem Standards
  671.  
  672.  
  673.          Two modems can communicate over a telephone line only if they  are
  674.          both  using  the  same signaling frequencies and modulation, which
  675.          are determined by the the modem standards used.   Modem  standards
  676.          can  be  divided  into three sets: (1) speed, (2) data compression
  677.          used, and (3) error control.
  678.  
  679.          The Bell standards (103 & 212A) are those of AT&T.  The CCITT (The
  680.          International  Consultative Committee for Telephone and Telegraph)
  681.          standards are designated as "V. ".
  682.  
  683.  
  684.          Speed
  685.  
  686.          Bell 103  --   300 baud
  687.          Bell 212A --  1200 baud
  688.          V.21      --   300 baud
  689.          V.22bis   --  1200 & 2400 baud
  690.          V.32      --  4800 & 9600 baud
  691.          V.32bis   --  4800, 7200, 9600, 12000, and 14400 baud
  692.  
  693.  
  694.          Data Compression
  695.  
  696.          MNP 5     --  Microcom Networking Protocol (proprietary).
  697.          V.42bis   --  International data compression standard.
  698.  
  699.  
  700.          Error Control
  701.  
  702.          MNP 2,3,4 --  Three level error correction (public domain).
  703.          V.42      --  International error correction standard.
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.         PCL4P Users Manual                                     Page 12
  721.          4.2 Flow Control
  722.  
  723.  
  724.          With modems using data compression, the modem to modem  connection
  725.          will  run  at various speeds depending on the quality of the line.
  726.          The computer to modem connection will be at  a  fixed  baud  rate.
  727.          Therefore,  a  protocol (flow control) is necessary to synchronize
  728.          the data flow  between  and  modems  and  the  computer  to  modem
  729.          connection.   Refer  to  your modem manual for information on flow
  730.          control protocols supported.
  731.  
  732.          Two  flow  control  protocols  are  used  by most all modems which
  733.          require flow control. Software flow control is  called  "XON/XOFF"
  734.          (other  software  flow  control  character  pairs  are defined but
  735.          operate the same as XON/XOFF) and hardware flow control is  called
  736.          "RTS/CTS".  Most modems which require flow control enable hardware
  737.          flow control by default.
  738.  
  739.          In   XON/XOFF  (software)  flow  control,  the  computer  suspends
  740.          transmitting data if it receives a XOFF character  (13  hex)  from
  741.          the  modem,  and  continues  transmitting  when  it receives a XON
  742.          character (11 hex).  Similiarly, the computer can signal the modem
  743.          not to send any more data by transmitting a XOFF to  it,  and  can
  744.          tell the modem to continue transmission be sending a XON.
  745.  
  746.          In  RTS/CTS  (hardware)  flow control, the RTS line is used by the
  747.          computer to signal the modem , while the CTS line is used  by  the
  748.          modem  to  signal  the  computer.  The  RTS line is set OFF by the
  749.          computer to tell the modem to suspend transmission, and set to  ON
  750.          to  tell  the modem to continue transmission.  The CTS line is set
  751.          to OFF by the modem to tell the computer to stop transmitting, and
  752.          set to ON to tell the computer to continue transmitting.
  753.  
  754.          Given  the  choice,  always  choose  hardware  flow  control  over
  755.          software   flow   control   so   that  all  data  transmission  is
  756.          transparent.  If hardware flow control is not the  default  (which
  757.          it almost always is), your should modify your modem initialization
  758.          string to turn hardware flow control on.
  759.  
  760.  
  761.  
  762.  
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.         PCL4P Users Manual                                     Page 13
  781.          4.3 Modem Initialization
  782.  
  783.  
  784.          If your application uses a modem (as opposed to using a null modem
  785.          cable),  then  you  should always send an initialization string to
  786.          your modem if it is a programmable modem such  as  those  made  by
  787.          Hayes.   Communication  programs  such as PROCOMM and TELIX always
  788.          send such a string automatically as soon as they start up.
  789.  
  790.          The particular initialization string depends on the make  of  your
  791.          modem.   For Hayes and Hayes AT command set compatible modems, the
  792.          following string (followed by a carriage return) should work:
  793.  
  794.               AT E1 S7=60 S11=60 V1 X1 Q0 S0=0
  795.  
  796.          Refer to your Modem User's Guide for a full  discussion  of  these
  797.          commands. A brief description is as follows:
  798.  
  799.          AT     Modem attention command.
  800.          E1     Modem will echo what you send to it.
  801.          S7=60  Wait 60 seconds for carrier and/or dial tone.
  802.          S11=60 Use 60 milliseconds for tone dialing duration & spacing.
  803.          V1     Display result code as words (not numbers).
  804.          X1     Use the extended result message (CONNECT XXXX) set.
  805.          Q0     Modem returns result codes.
  806.          S0=0   Do not answer RING.
  807.  
  808.          If your application will answer incoming calls, then  set  the  S0
  809.          register to the ring on which to automatically answer.
  810.  
  811.          If you send the above codes by using SioPutc (as opposed to typing
  812.          them from the keyboard), then follow these guidelines:
  813.  
  814.          (1) Send an initial  carriage  return  before  the  initialization
  815.          string.
  816.  
  817.          (2) Pause at least two tics (18 tics to  the  second)  after  each
  818.          character  sent  as  your  modem needs the time to perform its own
  819.          internal processing.  Pause a little longer if your modem  is  not
  820.          accepting your initialization string.
  821.  
  822.          (3) Pause one and a half seconds after sending any  initialization
  823.          command  such  as ATZ or AT&F since your modem must do quite a bit
  824.          of processing.
  825.  
  826.          If you experience any problems in initializing your  Hayes  modem,
  827.          you should first reset it to factory settings by sending:
  828.  
  829.               AT&F
  830.  
  831.          Refer  to  the  TERM  program (functions SendTo and WaitFor in the
  832.          file MODEM_IO.PAS) for an example  of  sending  an  initialization
  833.          string to a Hayes compatible modem.
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.         PCL4P Users Manual                                     Page 14
  841.          5.0 Problems
  842.  
  843.  
  844.          If  you cannot get your application to run properly, first compile
  845.          and run the  terminal  emulator  program  TERM  provided  on  your
  846.          distribution  disk.   If  you  are  using  a null modem cable or a
  847.          non-programmable modem, be sure not to  define  AT_COMMAND_SET  in
  848.          DEFINES.PAS.  If  you  are using a Hayes compatible modem, then do
  849.          define AT_COMMAND_SET {$DEFINE AT_COMMAND_SET}. If you  are  using
  850.          a  programmable modem which is not Hayes compatible, then you must
  851.          modify the initialization string for your particular modem.
  852.  
  853.          If your application does not run but TERM runs correctly, then you
  854.          have  most  likely made a programming mistake in your application.
  855.          MarshallSoft Computing cannot debug your  application,  especially
  856.          over  the telephone!  However, consider each of the following when
  857.          searching for an error in your application.
  858.  
  859.          1.  Did you include the "uses PCL4P" statement ?
  860.  
  861.          2.  Is your receive buffer large enough ? If you are using 1K data
  862.              blocks in YMODEM, then your receive buffer should be at  least
  863.              1K ( 2K if baud rates above 38400 are to be used ).
  864.  
  865.          4.  Have you selected too high a baud rate ( if you  are  using  a
  866.              slow PC ) ?  If only one COM port is being run, you should  be
  867.              able to run at 38400 baud on 8088 machines and 115200 on  most
  868.              286 and all 386 and 486 machines.
  869.  
  870.          5.  Are  you  attempting  to  run  another  application   in   the
  871.              background ?  Try running  without any other programs  running
  872.              in the background ( unload all TSR programs ).
  873.  
  874.          6.  If you are running two COM ports simultaneously, are you using
  875.              separate receive buffers ? ( you should ).
  876.  
  877.          7.  Did SioReset return a zero value ?  If not, then you must call
  878.              SioReset again. See TERM.PAS for an example.
  879.  
  880.          8.  Did you send the proper initialization string to your modem ?
  881.              Did you set DTR and RTS ? ( you should ).
  882.  
  883.          9.  Do you have more than one COM1 port, etc.  For example, if you
  884.              have a COM1 port on your motherboard,  you cannot add  another
  885.              COM1  port  or  modem  board  that  uses  COM1  without  first
  886.              disabling the COM1 on the motherboard.
  887.  
  888.          Registered  users  can call (205) 881 - 4630 from 5 PM to 9 PM CST
  889.          Monday through Friday for help.
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898.  
  899.  
  900.         PCL4P Users Manual                                     Page 15
  901.          6.0 Serial Communications
  902.  
  903.  
  904.          6.1 Communications Basics
  905.  
  906.  
  907.          The  heart  of  serial  communications  is  the  UART   (Universal
  908.          Asynchronous   Receiver   Transmitter).    The  IBM  PC/XT/AT  and
  909.          compatibles use the INS8250, INS16450, or the INS16550 UART.   The
  910.          purpose of the UART is:
  911.  
  912.          (1)  To convert bytes from the CPU (Central Processing Unit), into
  913.          a serial format by adding the necessary start,  stop,  and  parity
  914.          bits  to  each byte before transmission, and to then transmit each
  915.          bit at the correct baud rate.
  916.  
  917.          (2) To convert the incoming stream (at a specified baud  rate)  of
  918.          serial  bits  into  bytes  by removing the start, stop, and parity
  919.          bits before being made available to the CPU.
  920.  
  921.          The  UART  is  part of the serial interface circuitry which allows
  922.          the CPU to send and receive signals over the RS232 lines. This can
  923.          be diagrammed as follows:
  924.  
  925.                                Serial Interface
  926.                             *********************
  927.                             *                   *
  928.          *******  Data Bus  *     ********      *    RS232 Signals
  929.          * CPU **************     * UART *      ******************
  930.          *******            *     ********      *
  931.                             *                   *
  932.                             *********************
  933.  
  934.          The  INS8250/16450/16550  UART  is  capable of operating in one of
  935.          two  modes,  "polled"  and   "interrupt   driven".    The   serial
  936.          communications  functions  in the BIOS uses the polled method.  In
  937.          this approach, the CPU is typically in  a  loop  asking  the  UART
  938.          over  and  over  again  if  it  has a byte ready. If its does, the
  939.          polling code returns the byte.  But, if the  next  byte  comes  in
  940.          before  the  polling  code  is  executing again, then that byte is
  941.          lost.
  942.  
  943.          In  the  interrupt  driven  approach  (used  by PCL4P for incoming
  944.          data), when a byte is received by the UART, an "Interrupt  Service
  945.          Routine"  (ISR)  is  executed  immediately, suspending temporarily
  946.          whatever else is executing.  The ISR then  moves  the  byte  to  a
  947.          buffer  so  that your application program can later read it. Refer
  948.          to the sections entitled "RS232  Signals"  and  "National  INS8250
  949.          UART" for further information on these topics.
  950.  
  951.  
  952.  
  953.  
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  
  960.         PCL4P Users Manual                                     Page 16
  961.          6.2 Standard Port Addresses
  962.  
  963.  
  964.          There  are  a  few  things to know about how serial communications
  965.          ports are used by  IBM  PC/XT/AT  and  compatible  computers.  The
  966.          standard IBM PC/XT/AT configuration values are as follows:
  967.  
  968.          Port     Reg Base   IRQ Line   Vector
  969.          COM1        3F8H        4        12
  970.          COM2        2F8H        3        11
  971.          COM3        3E8H        4        12
  972.          COM4        2E8H        3        11
  973.  
  974.          (Refer to your DigiBoard manual for DigiBoard addresses).
  975.  
  976.          PCL4P assumes the  above  values.  If  necessary,  the  UART  base
  977.          address    can   be  changed  by  SioUART,  and  IRQ  lines can be
  978.          re-assigned by SioIRQ. Refer to the  PCL4P  Reference  Manual  for
  979.          specific details.
  980.  
  981.          When installing new communications cards, the following guidelines
  982.          are recommended:
  983.  
  984.          (1) Be sure to read the documentation  for  the  hardware  you  are
  985.          installing.   Pay special attention to UART base addresses and IRQ
  986.          lines.
  987.  
  988.          (2) If you have a choice in base addresses and IRQ  lines,  always
  989.          choose standard values as defined above.
  990.  
  991.          (3) The first port should be COM1, the second COM2, etc.
  992.  
  993.          (4)  Use  SioUART  to  zero  all  unused ports (for example, call
  994.          SioUART(COM4,0) if there is no COM4 port installed).
  995.  
  996.          (5)  Be  carefull not to configure two ports for the same address.
  997.          This is easier to do than you may believe.
  998.  
  999.          (6) Choose an external modem over an internal  one.   It  is  much
  1000.          easier  to  debug problems with an external modem than an internal
  1001.          one.
  1002.  
  1003.          (7)  Select  hardware  flow  control  (RTS/CTS) if flow control is
  1004.          required and hardware flow control is not the default.
  1005.  
  1006.          (8) Always test your port as soon as it is installed.
  1007.  
  1008.  
  1009.  
  1010.  
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.         PCL4P Users Manual                                     Page 17
  1021.          6.3 Running 3 or 4 Ports Concurrently
  1022.  
  1023.  
  1024.          PCL4C supports up to 4 serial ports running concurrently (more  if
  1025.          you  have  a  DigiBoard).  One  free  interrupt  for  each port is
  1026.          required. The following assumes that you don't have a DigiBoard.
  1027.  
  1028.          Interrupts IRQ4 and IRQ3 are dedicated to the communications ports
  1029.          in a standard IBM PC/XT/AT configuration.  IRQ4 is shared  between
  1030.          COM1  and  COM3  while IRQ3 is shared between COM2 and COM4.  This
  1031.          means that you can run two ports simultaneously provided that they
  1032.          don't share an interrupt.
  1033.  
  1034.          Suppose that you wish to run 3 ports simultaneously. To begin, you
  1035.          must have 3 serial UARTs installed on your computer.  Assume,  for
  1036.          purposes  of  this  discussion,  that  COM1  is  installed on your
  1037.          motherboard,  and  that  you  have  purchased   a   new   2   port
  1038.          serial communications board.
  1039.  
  1040.          You  should  be  able  to configure the first serial board port as
  1041.          COM2, which uses IRQ3.  Refer to the manual that  came  with  your
  1042.          serial board.
  1043.  
  1044.          In  order to run the third serial port concurrently with the first
  1045.          two, a unused interrupt must be found.  If your  serial  card  can
  1046.          only  use  IRQ3 and IRQ4, then there is no way to run a third line
  1047.          since IRQ4 and IRQ3 are used for COM1 and COM2.
  1048.  
  1049.          However,  many  serial  cards  can  use other IRQs, typically IRQ2
  1050.          through IRQ5. Since IRQ5 is normally used  for  a  second  printer
  1051.          port,  it  is a good candidate for COM3. To use IRQ5 for the third
  1052.          serial port, first set your serial  card  to  use  IRQ5  for  COM3
  1053.          (refer to your serial card manual) and then add the following line
  1054.          to your applications code before calling SioReset:
  1055.  
  1056.                 RetCode := SioIRQ(COM3,IRQ5,ThirdISR);
  1057.  
  1058.          Don't forget to disable any device that might use IRQ5, such as  a
  1059.          second  printer  port or a music card.  Unfortunately, there is no
  1060.          easy way to  determine  that  you  have  no  conflicts  until  you
  1061.          actually  attempt  to  use  the  IRQ. If there are conflicts, your
  1062.          system will probably hang and you will have to reboot.
  1063.  
  1064.          To run a fourth serial port, another free IRQ must  be  found.  On
  1065.          some  systems, IRQ2 can be used. To use IRQ2 for the fourth serial
  1066.          port, first set your serial card to use IRQ2  for  COM4  and  then
  1067.          add:
  1068.  
  1069.                 RetCode := SioIRQ(COM4,IRQ2,FourthISR);
  1070.  
  1071.          To summarize, your serial  card  must  be  able  to  generate  the
  1072.          correct  IRQ,  which is not already being used. Refer to the entry
  1073.          for the SioIRQ function in the PCL4C Reference Manual.
  1074.  
  1075.  
  1076.  
  1077.  
  1078.  
  1079.  
  1080.         PCL4P Users Manual                                     Page 18
  1081.          6.4 Using the DigiBoard
  1082.  
  1083.  
  1084.          The  Personal  Communications  Library supports the DigiBoard PC/4
  1085.          and  PC/8. In order to use the DigiBoard, you must configure PCL4P
  1086.          using the SioPorts and SioIRQ functions.
  1087.  
  1088.          Your PCs ports must be partitioned into "standard"  PC  ports  and
  1089.          DigiBoard  ports.   Remember  that  standard PC ports cannot share
  1090.          IRQs like the DigiBoard can. If you are using IRQ4  and  IRQ3  for
  1091.          standard  PC  ports  COM1 and COM2, then you cannot use either for
  1092.          DigiBoard ports (try IRQ5 or IRQ2).
  1093.  
  1094.          Suppose  that  COM1 through COM2 are standard PC ports (using IRQ4
  1095.          and IRQ3) and you have installed a PC/8 DigiBoard that you wish to
  1096.          use for COM3 through COM10 using interrupt line IRQ5.  You  choose
  1097.          to  use  the recommended DigiBoard UART addresses at $100, $108,
  1098.          $110, $118, $120, $128, $130, and $138.  Add  the  following
  1099.          configuration statements before doing any other serial processing:
  1100.  
  1101.          Code := SioPorts(10,COM3,$140); (* COM3 is first DigiBoard port *)
  1102.          Address := $100;                  (* 1st DigiBoard UART address *)
  1103.          for Port:=COM3 to COM10 do                 (* look at each port *)
  1104.            begin
  1105.              Code := SioUART(Port,Address);      (* set the UART address *)
  1106.              Address := Address + 8;              (* next DigiBoard UART *)
  1107.              Code := SioIRQ(Port,IRQ5,FifthISR);    (* set the IRQ & ISR *)
  1108.            end
  1109.  
  1110.          Note  that  $140 is the address of the DigiBoard status register,
  1111.          IRQ5 is the  interrupt  line  being  used,  and  FifthISR  is  the
  1112.          DigiBoard  interrupt  service routine.  Only "FifthISR" and can be
  1113.          used for DigiBoard ports! The first four ISRs are for standard  PC
  1114.          ports ONLY!.
  1115.  
  1116.          Don't  forget  that  your  DigiBoard  hardware  must be configured
  1117.          itself  to  match  the IRQ and UART values that you specify in the
  1118.          library.
  1119.  
  1120.          The  PCL4C  comes configured for 4 PC ports and no DigiBoard ports
  1121.          -- SioPorts(4,4,0).  Refer to the PCL4P Reference Manual for  more
  1122.          detailed  information  on  SioPorts  and  SioIRQ.
  1123.  
  1124.          If you are interested in the DigiBoard, they may be  contacted  at
  1125.          6400  Flying  Cloud  Drive,  Eden  Prairie,  MN  55344.  Telephone
  1126.          612-943-9020. FAX 612-943-5398.
  1127.  
  1128.  
  1129.  
  1130.  
  1131.  
  1132.  
  1133.  
  1134.  
  1135.  
  1136.  
  1137.  
  1138.  
  1139.  
  1140.         PCL4P Users Manual                                     Page 19
  1141.          6.5 RS-232 Signals
  1142.  
  1143.  
  1144.          RS-232 is the name of the serial data interface standard  used  to
  1145.          connect  computers  to  modems.  Most IBM compatible computers are
  1146.          built with at least one serial port and use either DB9 (9 pin)  or
  1147.          DB25 (25 pin) connectors.
  1148.  
  1149.          A summary of these pins and  their  function  follows.   For  more
  1150.          detailed  information, refer to one of the many books dealing with
  1151.          RS-232 interfacing.
  1152.  
  1153.          Signal Ground Pin 7 (DB25), Pin 5 (DB9)
  1154.  
  1155.          The SG line is used as the common signal ground, and  must  always
  1156.          be connected.
  1157.  
  1158.          Transmit Data Pin 2 (DB25), Pin 3 (DB9)
  1159.  
  1160.          The TX line is used to carry data from the computer to the modem.
  1161.  
  1162.          Receive Data Pin 3 (DB25), Pin 2 (DB9)
  1163.  
  1164.          The RX line is used to carry data from the modem to the computer.
  1165.  
  1166.          Data Terminal Ready Pin 20 (DB25), Pin 4 (DB9)
  1167.  
  1168.          The  DTR  line is used by the computer to signal the modem that it
  1169.          is ready. DTR should be set high when talking to a modem.
  1170.  
  1171.          Data Set Ready Pin 6 (DB25), Pin 6 (DB9)
  1172.  
  1173.          The DSR line is used by the modem to signal the computer  that  it
  1174.          is ready.
  1175.  
  1176.          Request to Send Pin 4 (DB25), Pin 7 (DB9)
  1177.  
  1178.          The  RTS  line  is  used  to "turn the line around" in half duplex
  1179.          modems, and for hardware flow control in most modems that  require
  1180.          flow control.
  1181.  
  1182.          Clear to Send Pin 5 (DB25), Pin 8 (DB9)
  1183.  
  1184.          The  CTS  line  is  used  to "turn the line around" in half duplex
  1185.          modems, and for hardware flow control in most modems that  require
  1186.          flow control.
  1187.  
  1188.          Data Carrier Detect Pin 8 (DB25), Pin 1 (DB9)
  1189.  
  1190.          The DCD line is used by the modem to signal the  computer  that  a
  1191.          data carrier signal is present.
  1192.  
  1193.          Ring Indicator Pin 22 (DB25), Pin 9 (DB9)
  1194.  
  1195.          The RI line is asserted when a 'ring' occurs.
  1196.  
  1197.  
  1198.  
  1199.  
  1200.         PCL4P Users Manual                                     Page 20
  1201.          6.6 National INS8250, INS16450, and INS16550 UARTs
  1202.  
  1203.  
  1204.          The  Personal  Communications  Library  is  based  on the standard
  1205.          National INS8250, INS16450, and INS16550 UARTs. The 8250  was  the
  1206.          original  UART  used  in the IBM PC, whereas the 16450 is a faster
  1207.          version found on most 286 & up machines. The 16550 contains  a  16
  1208.          byte  FIFO  to further reduce communications overhead. These UARTs
  1209.          consists of 8 register ports as follows:
  1210.  
  1211.          Offset    R/W   Register
  1212.            0       R/W   Receiver (read) / Transmitter (write)
  1213.            1       R/W   Interrupt Enable (read)
  1214.            2       R     Interrupt Identification
  1215.            2       W     FIFO control (INS16550 only)
  1216.            3       R/W   Data Format (Line Control)
  1217.            4       R/W   RS-232 (Modem) Control
  1218.            5       R/W   Line Status
  1219.            6       R/W   RS-232 (Modem) Status
  1220.            7       R/W   Not used.
  1221.  
  1222.          The  UART  registers  are  based  at  3F8  (COM1), 2F8 (COM2), 3E8
  1223.          (COM3), and 2E8 (COM4). COM1 and COM3 share  interrupt  vector  12
  1224.          and  interrupt  request  line  IRQ4  while  COM2  and  COM4  share
  1225.          interrupt vector 11 and interrupt request line IRQ3.   This  means
  1226.          that  COM1  and  COM3  cannot  both  be  used  at  the  same time.
  1227.          Similarly, COM2 and COM4 cannot both be used at the same time.
  1228.  
  1229.  
  1230.          Port     Reg Base   IRQ Line   Vector
  1231.          COM1        3F8H        4        12
  1232.          COM2        2F8H        3        11
  1233.          COM3        3E8H        4        12
  1234.          COM4        2E8H        3        11
  1235.  
  1236.          Four sources of interrupts are possible with the 8250  and  16550:
  1237.          (1) receiver error or BREAK, (2) receiver data ready, (3) ready to
  1238.          transmit,  and  (4) RS232 input.  These four sources of interrupts
  1239.          are summarized as follows:
  1240.  
  1241.          Source of Interrupt        Action Required to Clear
  1242.          Receiver error or BREAK.   Read Line Status register.
  1243.          Receiver data.             Read data from data register.
  1244.          Transmitter Buffer Empty.  Write to data register or read IID reg.
  1245.          RS232 input.               Read Modem Status register.
  1246.  
  1247.          However,  PCL4P  only  enables  the receiving data interrupt. This
  1248.          means that interrupts can only be caused by incoming data.
  1249.  
  1250.          If  you  are not familiar with the INS8250, several good books are
  1251.          available.   Refer  to  the  Serial  Communications  chapter   for
  1252.          recommendations.    Although  a  knowledge  of  the  8250  is  not
  1253.          necessary to use PCL4P, a  general  knowledge  of  the  theory  of
  1254.          asynchronous serial communications is recommended.
  1255.  
  1256.  
  1257.  
  1258.  
  1259.  
  1260.         PCL4P Users Manual                                     Page 21
  1261.          6.7 Register Summary
  1262.  
  1263.  
  1264.          REG 0 : Data Register
  1265.  
  1266.          Reading  from  the data register fetches the next input byte, once
  1267.          it is ready.  Writing to the  data  register  transmits  the  byte
  1268.          written to it over the serial line.
  1269.  
  1270.          REG 1 : Interrupt Enable 
  1271.  
  1272.          The  Interrupt  Enable  register  enables  each  of  four types of
  1273.          interrupts when the appropriate bit is set to a one.
  1274.  
  1275.          bit 3 : Enable interrupt on RS232 input.
  1276.          bit 2 : Enable interrupt on receiver error or break.
  1277.          bit 1 : Enable interrupt on transmitter buffer empty (TBE).
  1278.          bit 0 : Enable interrupt on received data (RxRDY).
  1279.  
  1280.          REG 2 : Interrupt Identification (IID)
  1281.  
  1282.          Reading  the  Interrupt Identification (read only) register once
  1283.          an interrupt has occurred identifies the interrupt as follows:
  1284.  
  1285.          Bit 2  Bit 1  Bit 0  Priority    Interrupt
  1286.            0      0      1      none      none
  1287.            1      1      0      0 (high)  Serialization or break.
  1288.            1      0      0      1         Received data.
  1289.            0      1      0      2         Transmitter Buffer Empty.
  1290.            0      0      0      3 (low)   RS232 Input.
  1291.  
  1292.          In the INS16650, REG 2 (write  only)  is  also  the  FIFO  control
  1293.          register.   Writing  bits  6  &  7 will set the FIFO trigger level
  1294.          (number of bytes received before an interrupt is generated).
  1295.  
  1296.          Bit 7  Bit 6   Trigger             Bit 7  Bit 6   Trigger
  1297.           0      0      1 byte               1      1      8 bytes
  1298.           0      1      4 bytes              1      1      14 bytes
  1299.  
  1300.          REG 3 : Line Control
  1301.  
  1302.          RS232 line parameters are selected by writing to this register.
  1303.  
  1304.          bit 7 : DLAB = 0
  1305.          bit 6 : BREAK on(1), off(0).
  1306.          bits 5-3: Parity None(000),ODD(001),EVEN(011),MARK(101),SPACE(111)
  1307.          bit 2 : One stop bit(0), two stop bits(1).
  1308.          bits 1-0: Data bits = 5 (00), 6(01), 7(10), 8(11).
  1309.  
  1310.          When the Divisor Latch Access Bit (DLAB) is 1, registers 0  and  1
  1311.          become the LS and MS bytes of the Baud Rate Divisor registers.
  1312.  
  1313.          Baud   Divisor      Baud  Divisor      Baud  Divisor
  1314.           300    0180        4800   0018       38400   0003
  1315.          1200    0060        9600   000C       57600   0002
  1316.          2400    0030       19200   0006      115200   0001
  1317.  
  1318.  
  1319.  
  1320.         PCL4P Users Manual                                     Page 22
  1321.          REG 4 : Modem Control
  1322.  
  1323.          RTS, DTR, loopback testing, and General Purpose Outputs #1 and  #2
  1324.          are controlled by the Modem Control register as follows:
  1325.  
  1326.          bit 4 : Enable local loopback.
  1327.          bit 3 : Enable GP02. Necessary for 8250 interrupts.
  1328.          bit 2 : Enable GP01.
  1329.          bit 1 : Set / clear RTS.
  1330.          bit 0 : Set / clear DTR.
  1331.  
  1332.          REG 5 : Line Status
  1333.  
  1334.          Reading  the  Line  Status register provides status information as
  1335.          follows (1 for TRUE, 0 for FALSE) :
  1336.  
  1337.          bit 6 : Transmitter Empty.
  1338.          bit 5 : Transmitter Buffer Empty (TBE).
  1339.          bit 4 : BREAK detect.
  1340.          bit 3 : Framing error.
  1341.          bit 2 : Parity error.
  1342.          bit 1 : Overrun error.
  1343.          bit 0 : Data Ready.
  1344.  
  1345.          REG 6 : Modem Status
  1346.  
  1347.          Reading the Modem Status register provides  the  following  status
  1348.          information (1 for TRUE, 0 for FALSE) :
  1349.  
  1350.          bit 7 : DCD status.
  1351.          bit 6 : RI status.
  1352.          bit 5 : DSR status.
  1353.          bit 4 : CTS status.
  1354.          bit 3 : Delta DCD status.
  1355.          bit 2 : Delta RI status.
  1356.          bit 1 : Delta DSR status.
  1357.          bit 0 : Delta CTS status.
  1358.  
  1359.          The delta bits (bits 0 through 3) are  set  whenever  one  of  the
  1360.          status  bits  (bits 4 through 7) changes (from 0 to 1 or from 1 to
  1361.          0) since the last time that the Modem Status  register  was  read.
  1362.          Reading the Modem Status register clear the delta bits.
  1363.  
  1364.          REG 7 : Scratch Register
  1365.  
  1366.          There is no function associated with  register  7.   It  does  not
  1367.          exist in early versions of the 8250.
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.         PCL4P Users Manual                                     Page 23
  1381.          7.0 Terminal Emulator Example Program
  1382.  
  1383.  
  1384.          TERM is an communications program suitable for calling up bulletin
  1385.          board  systems  (BBS)  and  performing  as  a  PC  to PC file copy
  1386.          program.  TERM itself is not part of the  communications  library,
  1387.          but  rather  it  is  provided  as  an  example of a communications
  1388.          application using PCL4P.
  1389.  
  1390.          TERM can send a standard Hayes standard AT command set  string  to
  1391.          your  modem.   An  initialization  string is sent by TERM provided
  1392.          that AT_COMMAND_SET is defined in DEFINES.PAS.
  1393.  
  1394.             {$DEFINE AT_COMMAND_SET}
  1395.  
  1396.          Refer to the chapter "Modem Initialization" for  a  discussion  of
  1397.          initialization strings.
  1398.  
  1399.          TERM  also supports hardware flow control (RTS/CTS). Hardware flow
  1400.          control is observed provided that the constant RTS_CTS_CONTROL  is
  1401.          defined in the file DEFINES.PAS.
  1402.  
  1403.             {$DEFINE RTS_CTS_CONTROL}
  1404.  
  1405.          Refer to the chapter "Flow Control" for a discussion  of  hardware
  1406.          flow control.
  1407.  
  1408.          TERM  can  also  exchange  files  using  XMODEM,   YMODEM   (batch
  1409.          capability),  and  YMODEM-G  (streaming  YMODEM  used  with  error
  1410.          correcting modems)  communications  protocols.   TERM  can  accept
  1411.          wildcards in the filename so that multiple files can be sent using
  1412.          YMODEM  and  YMODEM-G.   The  protocol timing can also be adjusted
  1413.          (this  should  not  be  necessary)  by  modifying  the   constants
  1414.          SHORT_WAIT and LONG_WAIT in the PCL4P.PAS file.
  1415.  
  1416.          TERM  can also be used as a PC to PC transfer program using a null
  1417.          modem cable. In  this  case,  AT_COMMAND_SET  and  RTS_CTS_CONTROL
  1418.          should not be defined in the file DEFINES.PAS:
  1419.  
  1420.          Be  advised  that  most  null modem cables are do NOT swap RTS and
  1421.          CTS, which is necessary for hardware flow control. This means that
  1422.          RTS_CTS_CONTROL should never be defined when using  a  null  modem
  1423.          cable unless you are absolutely sure that RTS and CTS are swapped.
  1424.  
  1425.          To start TERM, type TERM followed by the port (1  to  4)  and  the
  1426.          baud  rate (300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600,
  1427.          or 115200). For example, to start TERM at 2400 baud on port COM4:
  1428.  
  1429.             TERM 4 2400
  1430.  
  1431.          The TERM program (but of course not the library itself) is  placed
  1432.          in  the  public domain by MarshallSoft Computing, Inc., and can be
  1433.          used in any way desired by the user.
  1434.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439.  
  1440.         PCL4P Users Manual                                     Page 24
  1441.          8.0 Legal Issues
  1442.  
  1443.          8.1 Registration
  1444.  
  1445.  
  1446.          The shareware version of PCL4P.LIB is provided  so  that  you  may
  1447.          personally  determine  the usefulness of the product for yourself.
  1448.          If you can use  the  Personal  Communications  Library  for  Turbo
  1449.          Pascal, please register your use with us. Send $55 plus $3 S&H ($6
  1450.          outside of North America) to:
  1451.  
  1452.                   MarshallSoft Computing, Inc.
  1453.                   Post Office Box  4543
  1454.                   Huntsville AL 35815
  1455.  
  1456.          Multiple  copies  are available: $45 for 3 to 9, $35 for 10 to 19,
  1457.          and $25 for 20 or more. A site license is also available for  $495
  1458.          (includes 5 sets of printed documentation). We pay shipping.
  1459.  
  1460.          We accept  American  Express  (account  number,  expiration  date,
  1461.          exact  name  on  your  card,  and  AmEx billing address required),
  1462.          checks in US dollars drawn on a US bank, written  purchase  orders
  1463.          (POs)  from  recognized  US  schools and companies listed in Dun &
  1464.          Bradstreet, and COD (street address  and  phone  number  required)
  1465.          within  the  USA (plus a $3 COD charge).  Print the file PCL4C.INV
  1466.          if an invoice is needed. The registered package  is  mailed  first
  1467.          class US Mail (packet air mail overseas).
  1468.  
  1469.          The registered package includes:
  1470.  
  1471.          o  Assembler source code for the library.
  1472.          o  Printed Users Manual.
  1473.          o  Printed Reference Manual.
  1474.          o  Telephone, FAX, BBS support for one year.
  1475.          o  One year subscription (quarterly) to MSC newsletter.
  1476.          o  EXAMPORT -- Free utility which displays  a  detailed  formatted
  1477.             report  for  any  serial port. For example, to display a report
  1478.             for COM1, type "EXAMPORT 1".
  1479.  
  1480.          EXAMPORT is not sharware and  is  available  only  for  registered
  1481.          users of MarshallSoft products.
  1482.  
  1483.          All updates (with printed manuals) are $15 plus $3 S&H ($6 outside
  1484.          of North America).
  1485.  
  1486.          PCL4PLIB.ASM  is  the source code for the library. The source code
  1487.          is copyrighted by MarshallSoft Computing, Inc. The user is granted
  1488.          a  license  to  use  the  PCL4P  object  code  without  royalties.
  1489.          PCL4PLIB.ASM is not shareware and may not be sold or given away to
  1490.          anyone.
  1491.  
  1492.          The registered user will receive the latest version  of  PCL4P  by
  1493.          return  mail.  A 5.25" diskette is provided unless a 3.5" diskette
  1494.          is requested.
  1495.  
  1496.  
  1497.  
  1498.  
  1499.  
  1500.         PCL4P Users Manual                                     Page 25
  1501.          8.2 License
  1502.  
  1503.  
  1504.  
  1505.          MarshallSoft  Computing,  Inc. grants the registered user of PCL4P
  1506.          the right to use one copy of the PCL4P library (in object form) on
  1507.          a single computer in  the  development  of  any  software  product
  1508.          without  any  royalties.  The user may not use the library on more
  1509.          than one computer at the same  time.   The  source  code  for  the
  1510.          library (PCL4PLIB.ASM) may not be released in whole or in part.
  1511.  
  1512.  
  1513.          8.3 Warranty
  1514.  
  1515.  
  1516.          MARSHALLSOFT COMPUTING, INC. DISCLAIMS ALL WARRANTIES RELATING  TO
  1517.          THIS  SOFTWARE,  WHETHER  EXPRESSED  OR IMPLIED, INCLUDING BUT NOT
  1518.          LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY  AND  FITNESS
  1519.          FOR  A  PARTICULAR  PURPOSE, AND ALL SUCH WARRANTIES ARE EXPRESSLY
  1520.          AND SPECIFICALLY DISCLAIMED. NEITHER MARSHALLSOFT COMPUTING,  INC.
  1521.          NOR ANYONE ELSE WHO HAS BEEN INVOLVED IN THE CREATION, PRODUCTION,
  1522.          OR  DELIVERY  OF  THIS  SOFTWARE SHALL BE LIABLE FOR ANY INDIRECT,
  1523.  
  1524.          CONSEQUENTIAL, OR INCIDENTAL DAMAGES ARISING OUT  OF  THE  USE  OR
  1525.          INABILITY  TO  USE  SUCH  SOFTWARE EVEN IF MARSHALLSOFT COMPUTING,
  1526.          INC.  HAS BEEN ADVISED OF  THE  POSSIBILITY  OF  SUCH  DAMAGES  OR
  1527.          CLAIMS. IN NO EVENT SHALL MARSHALLSOFT COMPUTING, INC.'S LIABILITY
  1528.          FOR ANY SUCH DAMAGES EVER EXCEED THE PRICE PAID FOR THE LICENSE TO
  1529.          USE  THE SOFTWARE, REGARDLESS OF THE FORM OF THE CLAIM. THE PERSON
  1530.          USING  THE  SOFTWARE  BEARS  ALL  RISK  AS  TO  THE  QUALITY   AND
  1531.          PERFORMANCE OF THE SOFTWARE.
  1532.  
  1533.          Some  states  do not allow the exclusion of the limit of liability
  1534.          for consequential or incidental damages, so the  above  limitation
  1535.          may not apply to you.
  1536.  
  1537.          This  agreement  shall  be  governed  by  the laws of the State of
  1538.          Alabama and shall inure to the benefit of Marshallsoft  Computing,
  1539.          Inc.   and  any successors, administrators, heirs and assigns. Any
  1540.          action or proceeding brought by either  party  against  the  other
  1541.          arising  out of or related to this agreement shall be brought only
  1542.          in a STATE or FEDERAL COURT of competent jurisdiction  located  in
  1543.          Madison County, Alabama. The parties hereby consent to in personam
  1544.          jurisdiction of said courts.
  1545.  
  1546.  
  1547.  
  1548.  
  1549.  
  1550.  
  1551.  
  1552.  
  1553.  
  1554.  
  1555.  
  1556.  
  1557.  
  1558.  
  1559.  
  1560.         PCL4P Users Manual                                     Page 26
  1561.          9.0 Summary
  1562.  
  1563.          9.1 Revision History
  1564.  
  1565.  
  1566.          Version 1.0 -- 14 January 1991 -- original release.
  1567.  
  1568.          Version 1.1 -- 11 March 1991
  1569.  
  1570.          o  Added SioUnGetc() function to library.
  1571.  
  1572.          Version 1.2 -- 1 June 1991
  1573.  
  1574.          o  Name changed to Personal Communications Library.
  1575.          o  Minor bug fixes.
  1576.  
  1577.          Version 1.3 -- 1 July 1991
  1578.  
  1579.          o  Added NORESET option to SioReset.
  1580.          o  Added SioDSR, SioCTS, SioDCD, and SioRI.
  1581.          o  Added SioLoopBack function to library.
  1582.          o  Added LOOPBACK.PAS example program.
  1583.  
  1584.          Version 2.0 -- 1 Nov 1991
  1585.  
  1586.          o  All example code released in shareware package.
  1587.          o  Fixed bug due to Microsoft Assembler (MASM 5.0,5.1) error.
  1588.  
  1589.          Version 3.0 -- 15 Jan 1991
  1590.  
  1591.          o  Added XMODEM & YMODEM to example code.
  1592.          o  Added SioUART function.
  1593.          o  Added "UART undefined" error code.
  1594.          o  Added "Bad or missing UART" error code.
  1595.          o  Added "Port already enabled" error code.
  1596.          o  Added "Cannot enable both COM1 & COM3 ..." error code.
  1597.          o  Fixed several minor bugs ( using new automated testing ).
  1598.  
  1599.          Version 3.1 -- 1 March 1992
  1600.  
  1601.          o  Added SioFIFO ( INS16550 only ).
  1602.          o  Added SioIRQ function.
  1603.          o  Increased maximum receive buffer size to 32K bytes.
  1604.  
  1605.  
  1606.  
  1607.  
  1608.  
  1609.  
  1610.  
  1611.  
  1612.  
  1613.  
  1614.  
  1615.  
  1616.  
  1617.  
  1618.  
  1619.  
  1620.         PCL4P Users Manual                                     Page 27
  1621.          9.1 Revision History (continued)
  1622.  
  1623.  
  1624.          Version 3.2 -- 1 May 1992
  1625.  
  1626.          o  Modified SioReset so that it no longer clears DTR & RTS.
  1627.          o  Modified SioModel & renamed to SioInfo.
  1628.          o  Fixed bug in SioDone when using 2 ports simultaneously.
  1629.          o  Added SioFlow to library.
  1630.          o  Added YMODEM-G protocol to TERM program.
  1631.  
  1632.          Version 3.3 -- 3 August 1992
  1633.  
  1634.          o  Fixed bug in SioUnGet when using 2 ports simultaneously.
  1635.          o  Add SioRead function.
  1636.  
  1637.          Version 3.4 -- 4 Jan 1993
  1638.  
  1639.          o  Library modified to use up to four ports simultaneously.
  1640.          o  SioIRQ was modified to include  third argument.
  1641.          o  EXAMPORT utility distributed to registered users.
  1642.  
  1643.          Version 3.5 -- 15 May 1993
  1644.  
  1645.          o  Supports DigiBoard PC/4 and PC/8.
  1646.          o  Two new error traps added ("No such IRQ" & "No such ISR").
  1647.          o  ASCII file transfer protocol added to TERM (with XON/XOFF).
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654.  
  1655.  
  1656.  
  1657.  
  1658.  
  1659.  
  1660.  
  1661.  
  1662.  
  1663.  
  1664.  
  1665.  
  1666.  
  1667.  
  1668.  
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.  
  1676.  
  1677.  
  1678.  
  1679.  
  1680.         PCL4P Users Manual                                     Page 28
  1681.          9.2 Function Summary
  1682.  
  1683.  
  1684.          Refer to the  PCL4P  Reference  Manual  (PCL4P.REF)  for  detailed
  1685.          information  on  the  communications  and support functions. A one
  1686.          line summary of each function follows:
  1687.  
  1688.  
  1689.          SioBaud     Sets the baud rate of the selected port.
  1690.          SioBrkKey   Returns non-zero if the Control-BREAK key was pressed.
  1691.          SioBrkSig   Asserts, cancels, or detects BREAK signal.
  1692.          SioCTS      Reads the Clear to Send (CTS) modem status bit.
  1693.          SioDCD      Reads the Data Carrier Detect (DCD) modem status bit.
  1694.          SioDone     Terminates further serial processing.
  1695.          SioDSR      Reads the Data Set Ready (DSR) modem status bit.
  1696.          SioDTR      Set, clear, or read the Data Terminal Ready (DTR) bit.
  1697.          SioError    Displays error in text.
  1698.          SioFIFO     Sets the interrupt level for the INS16550.
  1699.          SioFlow     Enables / disables hardware flow control.
  1700.          SioGetc     Reads the next character from the serial line.
  1701.          SioInfo     Returns library version number.
  1702.          SioIRQ      Assigns an IRQ line and interrupt service to a port.
  1703.          SioLine     Reads the line status register.
  1704.          SioLoopBack Performs a UART loopback test.
  1705.          SioModem    Reads the modem status register.
  1706.          SioParms    Sets parity, stop bits, and word length.
  1707.          SioPorts    Sets # ports, 1st DigiBoard ports & status register.
  1708.          SioPutc     Transmit a character over a serial line.
  1709.          SioReset    Initialize a serial port for processing.
  1710.          SioRI       Reads the Ring Indicator (RI) modem status bit.
  1711.          SioRTS      Sets, clears, or reads the Request to Send (RTS) line.
  1712.          SioRxBuf    Sets up receive buffer.
  1713.          SioRxFlush  Flushes (clears) the receive buffer.
  1714.          SioRxQue    Returns the number of characters in the receive queue.
  1715.          SioTimer    Returns the number of system clock tics.
  1716.          SioUART     Sets the UART base address.
  1717.          SioUnGetc   "Un-gets" (puts back) a specified character.
  1718.  
  1719.  
  1720.          9.3 Further Reading
  1721.  
  1722.  
  1723.          The best way to learn about serial communications  is  to  read  a
  1724.          good  book  on the subject. Several good texts are available.  Two
  1725.          that I like are (sorry but most communications  books  use  C  for
  1726.          their examples) :
  1727.  
  1728.          (1) C Programmers's Guide to Serial Communications by Joe Campbell
  1729.          (SAMS)
  1730.  
  1731.          (2) Mastering Serial Communications by Peter Gofton (SYBEX).
  1732.  
  1733.  
  1734.  
  1735.  
  1736.  
  1737.  
  1738.  
  1739.  
  1740.         PCL4P Users Manual                                     Page 29
  1741.          10.0 Other MarshallSoft Computing Products
  1742.  
  1743.          10.1 The Personal Communications Library for C
  1744.  
  1745.          The Personal Communications Library for  Pascal  (PCL4C)  is  a  C
  1746.          language  version  of  the  Personal  Communications  Library  for
  1747.          Pascal, and is available for $45 plus $3 S&H ($6 S&H overseas). It
  1748.          contains   the   same   library   functions,   example   programs,
  1749.          documentation, and user support.
  1750.  
  1751.          10.2 The Personal Protocol Library for C
  1752.  
  1753.          The  Personal  Protocol  Library for C (PPL4C) consists of a state
  1754.          driven C language library  which  implements  XMODEM,  XMODEM-CRC,
  1755.          XMODEM-1K, XMODEM-G, YMODEM, and YMODEM-G file transfer protocols.
  1756.          This  allows  the  communications  application  to  run  two ports
  1757.          simultaneously while interacting with the user  at  the  keyboard.
  1758.          The  state  drive library functionally emulates background tasking
  1759.          with standard MSDOS.
  1760.  
  1761.          The primary application area for the protocol library  is  in  the
  1762.          development  of custom BBS programs (and programs that call BBS's)
  1763.          which  require  either  multiple  lines  or  which  require   user
  1764.          interaction  while  a  file transfer is underway. The state driven
  1765.          architecture can  also  be  used  as  a  framework  and  guide  to
  1766.          developing customized file transfer protocols.
  1767.  
  1768.          The protocol library (PPL4C) requires the C communications library
  1769.          PCL4C.   The  PPL4C  comes  with fully commented C source code, an
  1770.          example  program  which  can  transmit  or   receive   two   files
  1771.          simultaneously,  printed documentation, and one year of telephone,
  1772.          FAX, and BBS support.
  1773.  
  1774.          The Personal Protocol Library for C is available for $35  plus  $3
  1775.          S&H ($6 S&H overseas).  It can also be ordered together with the C
  1776.          communications  library  for  $65  for  both,  plus  $3.50 S&H ($7
  1777.          overseas).
  1778.  
  1779.          10.3 The Personal Protocol Library for Pascal
  1780.  
  1781.          The Personal Protocol Library for Pascal (PPL4P) is a Turbo Pascal
  1782.          version  of  the Personal Protocol Library for C, and is available
  1783.          for $35 plus $3 S&H ($6  S&H  overseas).   It  contains  the  same
  1784.          library  functions,  example  programs,  documentation,  and  user
  1785.          support.
  1786.  
  1787.          The Personal Protocol Library for Pascal is available for $35 plus
  1788.          $3  S&H  ($6  S&H overseas).  It can also be ordered together with
  1789.          the Pascal communications library for $65 for both, plus $3.50 S&H
  1790.          ($7 overseas).
  1791.  
  1792.  
  1793.  
  1794.  
  1795.  
  1796.  
  1797.  
  1798.  
  1799.  
  1800.         PCL4P Users Manual                                     Page 30
  1801.  
  1802.